import cv2
import numpy as np

# 读取图像
# image = cv2.imread(r"C:\Users\songz\Desktop\Snipaste_2025-06-19_15-32-49.png")
image = cv2.imread(r"C:\Users\songz\Desktop\Snipaste_2025-06-13_09-58-57.png")

# 转换为HSV色彩空间
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# 定义黄色的HSV阈值范围
lower_yellow = np.array([20, 50, 50])  # 黄色下限
upper_yellow = np.array([40, 255, 255])  # 黄色上限

# 创建掩码（在范围内的像素变为白色，其余黑色）
mask = cv2.inRange(hsv, lower_yellow, upper_yellow)

# 形态学操作（去噪点）
kernel = np.ones((5, 5), np.uint8)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)  # 开运算（先腐蚀后膨胀）
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)  # 闭运算（先膨胀后腐蚀）

# 提取原始图像中的黄色区域
result = cv2.bitwise_and(image, image, mask=mask)

# 可选：找到黄色区域的轮廓
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
    if cv2.contourArea(cnt) > 500:  # 过滤小区域
        x, y, w, h = cv2.boundingRect(cnt)
        cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)

# 显示结果
cv2.imshow('Original', image)
cv2.imshow('Mask', mask)
cv2.imshow('Yellow Detection', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
